﻿/***********************************************************************************************
COPYRIGHT 2008 Vijeth D

This file is part of Handwritten Character Recognition - NeuronDotNet Sample.
(Project Website : http://neurondotnet.freehostia.com)

NeuronDotNet is a free software. You can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software Foundation, either version 3
of the License, or (at your option) any later version.

NeuronDotNet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with NeuronDotNet.
If not, see <http://www.gnu.org/licenses/>.

***********************************************************************************************/

using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace NeuronDotNet.Controls
{
    public class DrawingBox : LetterBox
    {
        protected Stroke currentStroke;

        [Browsable(false)]
        public override bool ColorStrokes
        {
            get { return false; }
            set { }
        }

        public DrawingBox()
            : base()
        {
            currentStroke = null;

            this.MouseDown += new MouseEventHandler(delegate(object sender, MouseEventArgs e)
            {
                currentStroke = new Stroke();
                currentStroke.AddPoint(new Point(e.X, e.Y));
                this.Invalidate();
            });

            this.MouseMove += new MouseEventHandler(delegate(object sender, MouseEventArgs e)
            {
                if (currentStroke != null)
                {
                    if (e.X < 0 || e.Y < 0 || e.X >= this.Width || e.Y >= this.Width)
                    {
                        this.OnMouseUp(e);
                    }
                    else
                    {
                        currentStroke.AddPoint(new Point(e.X, e.Y));
                        this.Invalidate();
                    }
                }
            });

            this.MouseUp += new MouseEventHandler(delegate(object sender, MouseEventArgs e)
                {
                    if (currentStroke != null)
                    {
                        currentStroke.AddPoint(new Point(e.X, e.Y));
                        letter.AddStroke(currentStroke);
                        currentStroke = null;
                        this.Invalidate();
                    }
                });

            this.Paint += new PaintEventHandler(delegate(object sender, PaintEventArgs e)
            {
                if (currentStroke != null)
                {
                    using (Pen drawingPen = new Pen(ForeColor, drawWidth))
                    {
                        foreach (Line line in currentStroke.Lines)
                        {
                            e.Graphics.DrawLine(drawingPen, line.Start, line.End);
                        }
                    }
                }
            });
        }
    }
}
